ORM(Object-Relational Mapping,物件關聯映射)框架是一種技術,用於將面向對象編程中的對象映射到關聯式資料庫中的表格。ORM的主要目的是讓開發人員以面向對象的方式操作數據,而不必直接撰寫SQL語句進行資料庫操作。
ORM框架透過自動將資料庫的表、欄位與應用程式中的類、屬性進行映射,使得開發人員可以像操作物件一樣操作資料庫中的資料,從而提高了開發效率,減少了手動編寫SQL的需求。
常見的ORM框架包括:
ORM的好處包括:
但同時也有一些缺點,例如在進行複雜的查詢時,ORM可能不如手動撰寫SQL那樣高效。
這裡分別使用 Java(Hibernate)、Python(SQLAlchemy)和 C#(Entity Framework)來示範基本的ORM操作,展示如何透過ORM框架來進行簡單的資料庫插入操作。
// Hibernate 示例: 建立 Student 類別與資料庫對應
@Entity
@Table(name = "students")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
// Constructors, getters, setters, etc.
public Student() {}
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// 使用 Hibernate 進行資料庫操作
public class Main {
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Student.class).buildSessionFactory();
Session session = factory.getCurrentSession();
try {
Student student = new Student("Alice");
session.beginTransaction();
session.save(student);
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
# SQLAlchemy 示例: 定義 Student 類別並與資料庫對應
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class Student(Base):
__tablename__ = 'students'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String)
# 資料庫連接和操作
engine = create_engine('sqlite:///students.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
# 新增學生記錄
new_student = Student(name="Alice")
session.add(new_student)
session.commit()
// Entity Framework 示例: 定義 Student 類別並與資料庫對應
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
public class Student {
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
public class AppDbContext : DbContext {
public DbSet<Student> Students { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
optionsBuilder.UseSqlite("Data Source=students.db");
}
}
class Program {
static void Main() {
using (var context = new AppDbContext()) {
context.Database.EnsureCreated();
var student = new Student { Name = "Alice" };
context.Students.Add(student);
context.SaveChanges();
}
}
}
這三個例子展示了如何透過ORM框架進行基本的資料庫操作,如新增記錄。ORM框架能簡化資料庫操作,並且讓開發者專注於業務邏輯,而不需過多考慮底層SQL的細節。
⚠️在使用 Odoo 的 ORM 時,建議記住以下幾個重點:
1️⃣忘記繁瑣的資料庫操作,放心交給 Odoo 處理。它會自動處理大部分的資料庫管理任務。
2️⃣資料結構的規劃依然非常重要,雖然 Odoo 能簡化資料存取過程,但良好的資料表設計能顯著提高效能,讓開發更加順利。
3️⃣並非所有情況下都需要依賴 Odoo ORM。ORM 雖然強大,但在某些情境下並非最佳選擇,這時候尋找替代方案可能會事半功倍。